// 封装vuex里的用户模块 用来管理与用户相关的状态
// 导入封装好的token方法
import { getToken, setToken, removeToken } from '@/utils/auth.js'
// 导入登录接口
import { loginAPI } from '@/api/user.js'
// 导入获取信息的方法
import { getEmployeesApi } from "@/api/employees";
const state = {
  // 用来存储用户登入后的token
  token: getToken() //浏览器中的 cookie 保存了 token ，直接取出来使用
}

//用来修改状态
const mutations = {
  // 保存token
  setToken(state, payload) {
    // token保存到 vuex 中
    state.token = payload
    // token保存在cookie中
    setToken(payload)
  },

  //清除token
  removeToken(state) {
    // vuex中清除token
    state.token = null
    // cookie中清除token
    removeToken()
  }
}

//用来执行异步
const actions = {
  // 完成登入
  // payload 登入的信息
  async login(context, payload) {
    try {
      const res = await loginAPI(payload)
      //判断返回的状态
      console.log(res);
      if (res.succes) {
        console.log(res);
        const token = res.data
        // 保存token
        context.commit('setToken', token)
      }
    } catch (err) {
      console.log(err.message)
      // return Promise.reject(err)
    }
  },

  // 获取用户信息
  async getUserInfo (context) {
    // 发送请求到服务器(只获取了一部分的信息)
    const res = await getInfoApi()
    console.log(res);
    // 再获取另一个部分的信息
    const baseRes = await getEmployeesApi(res.data.userId)
    console.log(baseRes);
    // 将两个接口的数据进行合并
    const result = {...res.data, ...baseRes.data}
    // 保存用户信息
    context.commit('saveUserInfo', result)
    // 埋一个伏笔：返回得到的用户信息
    return result
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
